//////////////////////elaborado por: Susana Taquichiri////////////////////////
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NHibernate;
using NHibernate.Criterion;
using Didsoft.DataAccess.NHibernate;
using Didsoft.DataAccess.Contracts;
using Boa.AIT.AccesoDatos.Entidades;
using Boa.AIT.AccesoDatos.Contratos;

namespace Boa.AIT.AccesoDatos.Contexto
{
   public class AIT_EquipoDisponibleAccesoDatos : DataAccessBase<AIT_EquipoDisponible>, IAIT_EquipoDisponibleAccesoDatos
   {
     public AIT_EquipoDisponibleAccesoDatos()
     {
     }
     
     /// <summary>
     /// Devuelve una lista IList<AIT_EquipoDisponible> con todas las ocurrencias encontradas, en base a filtro.
     /// </summary>
     /// <param name="filtro"></param>
     /// <returns></returns>
     public IList<AIT_EquipoDisponible> BuscarPorFiltro(string filtro)
     {
             ICriteria criteria = Session.CreateCriteria(typeof(AIT_EquipoDisponible));
             criteria.Add(Expression.Like("Nombre", "%" + filtro + "%")); 
             return criteria.List<AIT_EquipoDisponible>();
     }


     public IList<AIT_EquipoDisponible> GetEquiposNoAsignados()
     {
         var hql = "from AIT_EquipoDisponible ed where ed not in (select aea.EquipoDisponible from AIT_AsignarEquipoAlmacen aea)";
         var query = Session.CreateQuery(hql);
         return query.List<AIT_EquipoDisponible>();
     }


     public string GetEquiposSinMantenimiento(int EquipoDisponibleId)
     { 
       string  sql= @"DECLARE @Equipos varchar(200)
                    SET @Equipos = NULL

                    --select ed.EquipoDisponibleId, COUNT(edi.EquipoDisponibleItem),  COUNT(am.AccionesMantenimientoId) 
                    select @Equipos = COALESCE(@Equipos + ', ','') + e.Codigo
                    from AIT_EquipoDisponible ed 
                    inner join AIT_EquipoDisponibleItem edi on edi.EquipoDisponibleId = ed.EquipoDisponibleId
                    inner join AIT_EquipoIT e on e.EquipoId = edi.EquipoId
                    inner join AIT_ModeloEquipo me on me.ModeloEquipoId = e.ModeloEquipoId
                    inner join AIT_TipoEquipo te on te.TipoEquipoId = me.TipoEquipoId
                    left join AIT_AccionesMantenimiento am on am.TipoEquipoId = te.TipoEquipoId
                    where ed.EquipoDisponibleId = :EquipoDisponibleId 
	                      AND e.AplicaMantenimientoPreventivo = 1 
	                      AND am.AccionesMantenimientoId is null

                    select @Equipos Result";

       var query = Session.CreateSQLQuery(sql);
       query.SetInt32("EquipoDisponibleId", EquipoDisponibleId);
       return query.UniqueResult<string>();

     
     }

   }
}

